// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Author: wsfuyibing <682805@qq.com>
// Date: 2024-07-16

package src

import (
	"github.com/gorhill/cronexpr"
)

// Strategy
// is a type name used to define timed execution time for crontab like follows.
//
//   - "*/1 * * * * * *" (every second)
//   - "0 1/* * * * * *" (every minute)
//   - "0 0 1/* * * * *" (every hour)
type Strategy string

// Common strategies.

const (
	// EveryMinute
	// schedule once every 0 seconds per minute like follows.
	//
	//   1. 09:00:00
	//   2. 09:01:00
	EveryMinute Strategy = "0 */1 * * * * *"

	// EveryHour
	// schedule once every 0 seconds and 0 minutes per hour like follows.
	//
	//   1. 09:00:00
	//   2. 10:00:00
	EveryHour Strategy = "0 0 */1 * * * *"
)

// Parse
// timed execution time.
func (o Strategy) Parse() (*cronexpr.Expression, error) {
	return cronexpr.Parse(o.String())
}

// String
// convert strategy as string.
func (o Strategy) String() string {
	return string(o)
}
